home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-11 / clipss.zip / BUTTOMS.PRG < prev    next >
Text File  |  1991-09-19  |  4KB  |  161 lines

  1. /*****
  2.  *
  3.  * BUTTOMS.PRG
  4.  * Button Routines
  5.  *
  6.  * Luiz F. Quintela
  7.  * Copyright (c) 1991 Nantucket Corporation.
  8.  *                    All Rights Reserved.
  9.  *
  10.  * WARNING: These functions are not supposed to
  11.  *          save/restore any part of the screen.
  12.  *          The only thing they save/restore is
  13.  *          the SETBLINK() status, since I am using
  14.  *          bright background colours.
  15.  *
  16.  * RMAKE 789
  17.  *
  18.  */
  19.  
  20. #include "buttoms.ch"
  21.  
  22. /*****
  23.  *
  24.  * Creates a Button
  25.  *
  26.  */
  27.  
  28. FUNCTION CreateButtom( nRow, nCol, cStr )
  29.    LOCAL aArray[SIZE]
  30.    LOCAL nAt
  31.  
  32.    // Highlight on selected letter
  33.    // (defaults to the first letter on string)
  34.    IF (nAt := AT("^", cStr)) == 0
  35.       cStr := "  ^" + cStr + "  "
  36.       nAt  := 3
  37.  
  38.    ELSE
  39.       cStr := "  " + cStr + "  "
  40.       nAt  += 2
  41.  
  42.    ENDIF
  43.  
  44.    // Build String
  45.    aArray.butStr := SUBSTR(cStr, 1, nAt - 1) +;
  46.                   SUBSTR(cStr, nAt + 1)
  47.    aArray.len    := LEN(aArray.butStr)
  48.    aArray.letCol := nCol + nAt - 1
  49.    aArray.butLet := SUBSTR(aArray.butStr, nAt, 1)
  50.  
  51.    // Where
  52.    aArray.row       := nRow
  53.    aArray.col       := nCol
  54.    aArray.ShadRow   := nRow + 1
  55.    aArray.ShadCol   := nCol + 1
  56.    aArray.upShadCol := nCol + aArray.len
  57.  
  58.    RETURN (aArray)
  59.  
  60. /*****
  61.  *
  62.  * Paints a Button
  63.  *
  64.  */
  65.  
  66. STATIC FUNCTION PaintButtom( aArray, lSelected, lShadow )
  67.    LOCAL cThisClr, nAt
  68.    LOCAL lBlink := SETBLINK(FALSE)
  69.  
  70.    lSelected := IF(lSelected == NIL, TRUE, lSelected)
  71.    lShadow   := IF(lShadow == NIL, TRUE, lShadow)
  72.  
  73.    DISPBEGIN()
  74.    // String
  75.    @ aArray.row,aArray.col SAY aArray.butStr ;
  76.    COLOR IF(lSelected, BUTTOMBGHI, BUTTOMBGLO)
  77.    // Letter
  78.    @ aArray.row,aArray.letCol SAY aArray.butLet ;
  79.    COLOR IF(lSelected, BUTTOMLETHI, BUTTOMLETLO)
  80.  
  81.    // Shadow?
  82.    IF lShadow
  83.       // Keep same background COLOR
  84.       cThisClr := SETCOLOR()
  85.       nAt := AT("/" , cThisClr) 
  86.       cThisClr := "N" + SUBSTR(cThisClr, nAt)
  87.       @ aArray.shadRow,aArray.shadCol SAY ;
  88.       REPLICATE(CHR(223), aArray.len);
  89.       COLOR cThisClr
  90.       @ aArray.row,aArray.upShadCol SAY CHR(220);
  91.       COLOR cThisClr
  92.  
  93.    ENDIF
  94.  
  95.    DISPEND()
  96.    SETBLINK(lBlink)
  97.    RETURN (NIL)
  98.  
  99. /*****
  100.  *
  101.  * Selects a Button
  102.  *
  103.  */
  104.  
  105. FUNCTION SelectButtom( aArray, lShadow )
  106.    lShadow := IF(lShadow == NIL, TRUE, lShadow)
  107.  
  108.    PaintButtom(aArray, TRUE, lShadow)
  109.  
  110.    RETURN (NIL)
  111.  
  112. /*****
  113.  *
  114.  * Unselects a Button
  115.  *
  116.  */
  117.  
  118. FUNCTION UnselectButtom( aArray, lShadow )
  119.    lShadow := IF(lShadow == NIL, TRUE, lShadow)
  120.  
  121.    PaintButtom(aArray, FALSE, lShadow)
  122.  
  123.    RETURN (NIL)
  124.  
  125. /*****
  126.  *
  127.  * "Presses" a Button
  128.  *
  129.  */
  130.  
  131. FUNCTION PressButtom( aArray, lSelected, lShadow )
  132.    LOCAL lBlink := SETBLINK(.F.)
  133.  
  134.    lShadow   := IF(lShadow == NIL, TRUE, lShadow)
  135.    lSelected := IF(lSelected == NIL, TRUE, lSelected)
  136.  
  137.    //
  138.    // Assuming current background COLOR
  139.    //
  140.  
  141.    // Blank button
  142.    DISPBEGIN()
  143.    @ aArray.row,aArray.col SAY SPACE(aArray.len + 1)
  144.    @ aArray.shadRow,aArray.shadCol SAY SPACE(aArray.len)
  145.    // String
  146.    @ aArray.shadRow,aArray.shadCol + 1 SAY ;
  147.    aArray.butStr COLOR IF(lSelected, BUTTOMBGHI, BUTTOMBGLO)
  148.    // Letter
  149.    @ aArray.shadRow,aArray.letCol + 2 SAY ;
  150.    aArray.butLet COLOR IF(lSelected, BUTTOMLETHI, BUTTOMLETLO)
  151.    DISPEND()
  152.    INKEY(.5)
  153.    @ aArray.shadRow,aArray.shadCol + 1 SAY SPACE(aArray.len)
  154.    PaintButtom(aArray, lSelected, lShadow)
  155.    INKEY(.3)
  156.  
  157.    SETBLINK(lBlink)
  158.    RETURN (NIL)
  159.  
  160. // EOF - BUTTOMS.PRG //
  161.